﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
//int maxPower(char* s) {
//	int flag = 1;
//	int max = 0;
//	while (*s)
//	{
//		if (*s == *(s + 1))
//			flag++;
//		else
//		{
//			if (max == 0)
//				max = flag;
//			if (max < flag)
//				max = flag;
//			flag = 1;
//		}
//		s++;
//	}
//	return max;
//}
//int main()
//{
//	char p[] = "leetcode";
//	int ret = maxPower(p);
//	printf("%d", ret);
//	return 0;
//}
//无零整数是十进制表示中 不含任何 0 的正整数。

//给你一个整数 n，请你返回一个 由两个整数组成的列表[A, B]，满足：
//A 和 B 都是无零整数
//A + B = n
//题目数据保证至少有一个有效的解决方案。
//如果存在多个有效解决方案，你可以返回其中任意一个。
//int test(int n)
//{
//	while (n)
//	{
//		if (n % 10 == 0)
//			return 0;
//		n /= 10;
//	}
//	return 1;
//}
//
//int* getNoZeroIntegers(int n, int* returnSize) {
//	*returnSize = 2;
//	int i = 1;
//	int j = n - 1;
//	int* p1 = (int*)malloc(sizeof(int) * 2);
//	while (1)
//	{
//		if (test(i) && test(j))
//		{
//			p1[0] = i;
//			p1[1] = j;
//			break;
//		}
//		i++;
//		j--;
//	}
//	return p1;
//}

//考虑不足
//int* arrayRankTransform(int* arr, int arrSize, int* returnSize) {
//	int i = 0;
//	*returnSize = arrSize;
//	int* p1 = (int*)malloc(sizeof(int) * arrSize);
//	for (i = 0; i < arrSize; i++)
//	{
//		int n = 1;
//		int j = 0;
//		for (j = 0; j < arrSize; j++)
//		{
//			if (arr[j] > arr[i])
//				n++;
//		}
//		p1[i] = n;
//	}
//	return p1;
//}

//旧题新作
//int cmpfunc(void* a, void* b)
//{
//	return (*(int*)a - *(int*)b);
//}
//
//bool check(int* nums, int numsSize)
//{
//	int i = 0;
//	char* p1 = (char*)malloc(2 * numsSize + 1);
//	for (i = 0; i < numsSize; i++)
//	{
//		p1[i] = '0' + nums[i];
//	}
//	int j = 0;
//	for (j = 0; j < numsSize; j++)
//	{
//		p1[i] = '0' + nums[j];
//		i++;
//	}
//	p1[i] = '\0';
//	qsort(nums, numsSize, sizeof(int), cmpfunc);
//	char* p2 = (char*)malloc(sizeof(char) * numsSize + 1);
//	for (i = 0; i < numsSize; i++)
//	{
//		p2[i] = nums[i] + '0';
//	}
//	p2[i] = '\0';
//	if (strstr(p1, p2) != NULL)
//	{
//		return true;
//	}
//	return false;
//}
//int main()
//{
//	int arr[] = { 2,1,3,4 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	check(arr, sz);
//	return 0;
//}

//旧题新作
//int secondHighest(char* s)
//{
//	int arr[10] = { 0 };
//	while (*s)
//	{
//		if (*s >= '0' && *s <= '9')
//		{
//			arr[*s - '0']++;
//		}
//		s++;
//	}
//	int i = 0;
//	int flag = 0;
//	for (i = 9; i >= 0; i--)
//	{
//		if (arr[i] != 0)
//		{
//			flag++;
//			if (flag == 2)
//			{
//				return i;
//			}
//		}
//	}
//	return -1;
//}

//char firstUniqChar(char* s)
//{
//	int arr[26] = { 0 };
//	char* p = s;
//	int len = strlen(s);
//	while (*p)
//	{
//		arr[*p - 'a']++;
//		p++;
//	}
//	int i = 0;
//	while (*s)
//	{
//		if (arr[*s - 'a'] == 1)
//			return *s;
//		s++;
//	}
//	return ' ';
//}

//旧题新做
// 减少了代码量
//int searchInsert(int* nums, int numsSize, int target)
//{
//	int i = 0;
//	if (nums[i] >= target)
//		return 0;
//	else if (nums[numsSize - 1] < target)
//		return numsSize;
//	else if (nums[numsSize - 1] == target)
//		return numsSize - 1;
//	else
//	{
//		for (i = 1; i < numsSize; i++)
//		{
//			if (nums[i] == target)
//				return i;
//			if (nums[i] > target && nums[i - 1] < nums[i])
//				return i;
//		}
//	}
//	return 0;
//}

//给定一个已按照 升序排列  的整数数组 numbers ，请你从数组中找出两个数满足相加之和等于目标数 target 。
//函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 ，
//所以答案数组应当满足 0 <= answer[0] < answer[1] < numbers.length 。
//假设数组中存在且只存在一对符合条件的数字，同时一个数字不能使用两次。
//旧题新做
//int* twoSum(int* numbers, int numbersSize, int target, int* returnSize)
//{
//	*returnSize = 2;
//	int* p1 = (int*)malloc(sizeof(int) * 2);
//	int i = 0;
//	for (i = 0; i < numbersSize; i++)
//	{
//		int j = 0;
//		for (j = 0; j < numbersSize; j++)
//		{
//			if (i == j)
//				continue;
//			if (numbers[i] + numbers[j] == target)
//			{
//				p1[1] = j;
//				p1[0] = i;
//				goto end;
//			}
//		}
//	}
//end:
//	return p1;
//}
//int main()
//{
//	int arr[] = {1,2,4,6,10};
//	int target = 8;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int num = 0;
//	twoSum(arr, sz, target, &num);
//	return 0;
//}

//用哈希表来写
//bool isUnique(char* astr)
//{
//	int hash[26] = { 0 };
//	int i = 0;
//	while (*astr)
//	{
//		arr[*astr - 'a']++;
//		astr++;
//	}
//	for (i = 0; i < 26; i++)
//	{
//		if (arr[i] != 1 && arr[i] != 0)
//		{
//			return false;
//		}
//	}
//	return true;
//}

//int findMaxConsecutiveOnes(int* nums, int numsSize) {
//	int i = 0;
//	int max = 0;
//	int flag = 0;
//	for (i = 0; i < numsSize; i++)
//	{
//		if (nums[i] == 1)
//		{
//			flag++;
//		}
//		else
//		{
//			if (max < flag)
//				max = flag;
//			flag = 0;
//		}
//	}
//	if (max < flag)
//		max = flag;
//	return max;
//}
//int main()
//{
//	int arr[] = { 1,1,0,1,1,1 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int ret = findMaxConsecutiveOnes(arr, sz);
//	printf("%d", ret);
//	return 0;
//}

//void test(int* arr, int i, int arrSize)
//{
//	int j = arrSize - 2;
//	for (j; j > i; j--)
//	{
//		arr[j + 1] = arr[j];
//	}
//}
//
//void duplicateZeros(int* arr, int arrSize) {
//	int i = 0;
//	for (i = 0; i < arrSize; i++)
//	{
//		if (arr[i] == 0)
//		{
//			if (i < arrSize - 1)
//			{
//				test(arr, i, arrSize);
//				arr[i + 1] = 0;
//				i++;
//			}
//		}
//	}
//}

//int test(int n)
//{
//	int i = 0;
//	int sum = 1;
//	for (i = 1; i <= n; i++)
//	{
//		sum *= i;
//	}
//	return sum;
//}
//
//int trailingZeroes(int n) {
//	int sum = test(n);
//	int flag = 0;
//	while (sum % 10 == 0)
//	{
//		flag++;
//		sum /= 10;
//	}
//	return flag;
//}
//int main()
//{
//	int n = 13;
//	int ret = trailingZeroes(n);
//	printf("%d", ret);
//	return 0;
//}